目录
-
8种降低cache不命中率的方法
-
增加cache大小
- 对于给定的cache容量, 当块大小增加时, 不命中率开始是下降的, 后来反而上升
- 原因: 一方面减少了强制性不命中, 另一方面又增加了冲突不命中
- 对于给定的cache容量, 当块大小增加时, 不命中率开始是下降的, 后来反而上升
-
增加cache容量
-
提高相连度
- 相连度超过8就意义不大了
- 提高相连度是以牺牲命中时间为代价
- 2 : 1 cache经验规则
- 容量为N的直接映像cache不命中率和容量为N/2的二路组相连的cache不命中率相同
-
伪相连cache
- 优点: 命中时间小, 不命中率低
- 工作原理
- 在逻辑上把直接映像的cache上下分成两个区. 对于任何一次访问, 伪相连cache先按照直接映像cache的方式去处理. 若命中, 则访问方式和直接映像cache的方式一样. 若不命中, 则去另一个区的对应位置去查找. 若找到则发生伪命中, 否则就去访问下一级存储器
- 工作原理
- 快速命中和慢速命中
- 分别对应快速命中和慢速命中
- 优点: 命中时间小, 不命中率低
-
硬件预取
- 指令和数据都可以预取
-
编译器控制的预取
- 目的: 使执行指令和读取数据可以重叠执行
- 每次预取花费一条指令的开销
- 按照预取数据所放置的位置可以分为两种
- 寄存器预取
- cache预取
- 按照预取的处理方式可以分为
- 故障性预取
- 非故障性预取
-
编译优化
- 通过对软件进行优化来降低不命中率
- 程序代码和数据重组
- 重新组织程序而不影响程序的正确性
-
"牺牲"cache
- 能减少冲突不命中次数而又不影响时钟频率的方法
- 基本思想
- 在cache和它的下一级存储器之间设置一个全相连的小cache, 用于存放刚被替换出去的块, 以备重用.
- 优点: 可以明显减少冲突不命中
-
-
三种类型的不命中
-
分类
-
强制性不命中
- 第一次访问cache的不命中就是强制性不命中
-
容量不命中
- 某些块刚被替换出去又要重新访问, 这个就是容量不命中
-
冲突不命中
- (碰撞不命中, 干扰不命中)
-
-
三种不命中所占的比例
- 相连度越高, 冲突不命中就越少
- 强制性不命中和容量不命中不受相连度的影响
- 强制不命中不受cache容量的影响, 但容量不命中却随着容量的增加而减少
-
减少三种不命中的方法
- 强制性不命中: 增加快大小 预取
- 容量不命中: 增加容量
- 冲突不命中: 增加相连度
-